LAZY, EXTRA_LAZY, EAGER
from DoctrineのN+1問題の解決策
defaultでLAZYである
必要になった時に遅延読み込みする
しかし、N+1問題に遭遇する
EAGERを指定するとEager Loadingする
SQLで全部のデータを取ってくるのでアクセス回数は減って速い
が、必要以上にデータを取ってくるのでメモリを食う
実際に、全データを使うのであればそれは必要なメモリなので別に良いが、多くのケースではそんなことないと思うので過剰にとってくることになる
EXTRA_LAZY
countするだけ、みたいに
データの内部までは必要ないけど、
全体の個数がほしい
のようなときに、LAZYよりやや効率的になる
https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/tutorials/extra-lazy-associations.html#extra-lazy-associations
count以外のユースケースは #??
https://engineering.otobank.co.jp/entry/2016/06/13/174232
LAZY, EGAER, EXTRA_LAZYの3つを比較している
この記事の「結論」にも書かれているが、結局LAZYかEXTRA_LAZYを使うことになるっぽい
N+1になるときは、DoctrineのN+1問題の解決策のように無駄に(?)joinしたDQLを書くことになる
しかしこれをEntity定義時に指定しないといけないの渋すぎない #??
query発行する際に指定できるべきだと思うけどmrsekut.icon
これが無理なのでEAGERを使う機会はほぼない気がする
https://symfony.com/doc/current/doctrine/associations.html
https://coderedirect.com/questions/373179/eager-loading-of-related-entity-in-symfony-2
https://www.reddit.com/r/PHP/comments/4jj0ej/doctrine_2_question_eager_loading_on_the_fly_for/